<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of Transacciones
 *
 * @author Ramiro
 */
class Transacciones {

    static private $instancia = NULL;

    public function __construct() {
        
    }

    private function __clone() {
        trigger_error('Clone is not allowed.', E_USER_ERROR);
    }

    static public function getInstancia() {
        if (self::$instancia == NULL) {
            self::$instancia = new Connection();
        }
        return self::$instancia;
    }

    /**
     * Retornar el id de una cuenta
     * @param type $numero
     * @return string
     */
    public function propietarioCuenta($numero) {
        $con = ConnectionSecure::getInstancia();
        $con->conectar();
        $numero = $this->escapar($numero);
        $dbconn = $con->getConexion();
        $query = $dbconn->prepare("SELECT  id FROM cuenta WHERE  numero =?  limit 1");
        $query->bind_param("i", $numero);
        $resultado = $query->execute();

        if ($resultado) {
            $query->bind_result($id);
            $query->fetch();
            $con->desconectar();
            if (isset($id) && $id > 0) {
                return $id;
            } else {
                return '-1';
            }
        }
    }

    public function escapar($var) {
        $var = stripslashes($var);
        $var = htmlentities($var);
        $var = strip_tags($var);
        $var = addslashes($var);
        $var = mysql_real_escape_string($var);
        return $var;
    }

    public function usuarioTieneCuenta($id, $username) {

        $id = $this->escapar($id);
        $username = $this->escapar($username);
        $con = ConnectionSecure::getInstancia();
        $con->conectar();
        $dbconn = $con->getConexion();
        $query = $dbconn->prepare("SELECT  id FROM cuenta WHERE id =?  AND  idpropietario = (SELECT  id FROM usuario WHERE  Username =?  limit 1) limit 1");
        $query->bind_param("is", $id, $username);
        $resultado = $query->execute();
        if ($resultado) {
            $query->bind_result($id);
            $query->fetch();
            if (isset($id) && $id > 0) {
                $con->desconectar();
                return $id;
            } else {
                return '-1';
            }
        }
    }

    public function tokenEsValido($as) {
        
    }

    public function insertarTransaccion($idaprueba, $idpaga, $idrecibe, $aprobada, $monto, $idusuarioRealiza, $token) {

        $con = ConnectionSecure::getInstancia();
        $con->conectar();
        $dbconn = $con->getConexion();
        $query = $dbconn->prepare("INSERT INTO `transaccion`(`identidad`, `idcuenta_paga`, `idcuenta_recibe`, `aprobada`, `monto`) VALUES (?,?,?,?,?)");
        $query->bind_param("iiiii", $idaprueba, $idpaga, $idrecibe, $aprobada, $monto);
        if ($query->execute() == true) {
            $con->desconectar();
            $con->conectar();
            $dbconn = $con->getConexion();
            $query2 = $dbconn->prepare("UPDATE `cuenta` SET `Saldo` = Saldo + ?  WHERE `id`= ?");
            $query2->bind_param("ii", $monto, $idrecibe);
            if ($query2->execute() == true) {
                $con->desconectar();
                $con->conectar();
                $dbconn = $con->getConexion();
                $query3 = $dbconn->prepare("UPDATE `usuario` SET `Saldo`= Saldo + ? WHERE `id`= (select idpropietario from cuenta where id=? limit 1 )");
                $query3->bind_param("ii", $monto, $idrecibe);
                if ($query3->execute() == true) {
                    $con->desconectar();
                    $con->conectar();
                    $dbconn = $con->getConexion();
                    $query4 = $dbconn->prepare("UPDATE `cuenta` SET `Saldo` = Saldo - ?  WHERE `id`= ?");
                    $query4->bind_param("ii", $monto, $idpaga);
                    if ($query4->execute() == true) {
                        $con->desconectar();
                        $con->conectar();
                        $dbconn = $con->getConexion();
                        $query5 = $dbconn->prepare("UPDATE `usuario` SET `Saldo`= Saldo - ? WHERE `id`= ?");
                        $query5->bind_param("ii", $monto, $idusuarioRealiza);
                        if ($query5->execute() == true) {
                            $con->desconectar();
                            $con->conectar();
                            $dbconn = $con->getConexion();
                            $query6 = $dbconn->prepare("UPDATE `tokens` SET `usado`= 1 WHERE `idcuenta`= ? AND `Token`=?");
                            $query6->bind_param("is", $idpaga, $token);
                            if ($query6->execute() == true) {
                                $con->desconectar();
                                return true;
                            } else {
                                $con->desconectar();
                                return false;
                            }
                        } else {
                            $con->desconectar();
                            return false;
                        }
                    } else {
                        $con->desconectar();
                        return false;
                    }
                } else {
                    $con->desconectar();
                    return false;
                }
            } else {
                $con->desconectar();
                return false;
            }
        } else {
            $con->desconectar();
            return false;
        }
    }

    public function insertarTransaccionPorAprobar($idpaga, $idrecibe, $monto, $token) {

        $con = ConnectionSecure::getInstancia();
        $con->conectar();
        $dbconn = $con->getConexion();
        $query = $dbconn->prepare("INSERT INTO `transaccion`(`idcuenta_paga`, `idcuenta_recibe`,  `monto`) VALUES  (?,?,?)");
        $query->bind_param("iii", $idpaga, $idrecibe, $monto);

        if ($query->execute() == true) {
            $con->desconectar();
            $con->conectar();
            $dbconn = $con->getConexion();
            $query1 = $dbconn->prepare("UPDATE `tokens` SET `usado`= 1 WHERE `idcuenta`= ? AND `Token`=?");
            $query1->bind_param("is", $idpaga, $token);
            if ($query1->execute() == true) {
                $con->desconectar();
                return true;
            } else {
                $con->desconectar();
                return false;
            }
        } else {
            $con->desconectar();
            return false;
        }
    }

    public function aprobarTransaccion($id) {
        //const SQL_UPDATE='UPDATE `transaccion` SET `id`=?,`identidad`=?,`idusuario_paga`=?,`idusuario_aprueba`=?,`aprobada`=?,`monto`=? WHERE `id`=?';        

        $id = addslashes(htmlspecialchars($id));
        $con = ConnectionSecure::getInstancia();
        $con->conectar();
        $dbconn = $con->getConexion();
        $query = $dbconn->prepare("SELECT `identidad`,`idcuenta_paga`,`idcuenta_recibe`,`aprobada`,`monto` FROM transaccion WHERE id=?");
        $query->bind_param("i", $id);

        if ($query->execute() == true) {
            $query->bind_result($identidad, $idcuentapaga, $pcuentarecibe, $aprobada, $pmonto);
            $query->fetch();
            $con->desconectar();
            //   $idcuentapaga = $row['idcuenta_paga'];
            //    $pmonto = $row['monto'];
            //  $pcuentarecibe = $row['idcuenta_recibe'];

            $con->conectar();
            $dbconn = $con->getConexion();
            $query2 = $dbconn->prepare("UPDATE `transaccion` SET `aprobada`='1' WHERE `id`=?");
            $query2->bind_param("i", $id);
            if ($query2->execute() == true) {
                $con->desconectar();
                $con->conectar();
                $dbconn = $con->getConexion();
                $query3 = $dbconn->prepare("UPDATE `cuenta` SET `Saldo` = Saldo + ?  WHERE id= ?");
                $query3->bind_param("ii", $pmonto, $pcuentarecibe);
                if ($query3->execute() == true) {
                    $con->desconectar();
                    $con->conectar();
                    $dbconn = $con->getConexion();
                    $query4 = $dbconn->prepare("UPDATE `usuario` SET `Saldo`= Saldo + ? WHERE id= (select idpropietario from cuenta where id=? limit 1 )");
                    $query4->bind_param("ii", $pmonto, $pcuentarecibe);
                    if ($query4->execute() == true) {
                        $con->desconectar();
                        $con->conectar();
                        $dbconn = $con->getConexion();
                        $query5 = $dbconn->prepare("UPDATE `cuenta` SET `Saldo` = Saldo - ? WHERE id = ?");
                        $query5->bind_param("ii", $pmonto, $idcuentapaga);
                        if ($query5->execute() == true) {
                            $con->desconectar();
                            $con->conectar();
                            $dbconn = $con->getConexion();
                            $query6 = $dbconn->prepare("UPDATE `usuario` SET `Saldo`= Saldo - ? WHERE id= ?");
                            $query6->bind_param("ii", $pmonto, $idcuentapaga);
                            if ($query6->execute() == true) {
                                $con->desconectar();
                                return true;
                            } else {
                                $con->desconectar();
                                return false;
                            }
                        } else {
                            $con->desconectar();
                            return false;
                        }
                    } else {
                        $con->desconectar();
                        return false;
                    }
                } else {
                    $con->desconectar();
                    return false;
                }
            } else {
                $con->desconectar();
                return false;
            }
        } else {
            $con->desconectar();
            return false;
        }
    }

    public function consultarTransaccionesPendientes() {
        //const SQL_UPDATE='SELECT * FROM `transaccion` WHERE `ESTADO`='. $estado . ';';        
        $SQL_UPDATE = 'SELECT `id`, 
             (select numero from cuenta where id=idcuenta_recibe limit 1 )
            as nombrerecibe, 
            (select concat(nombres," ",apellidos) from usuario where id=(select idpropietario from cuenta where id=idcuenta_paga limit 1 )limit 1) 
            as nombrepaga,             
            aprobada,monto,(select numero from cuenta where id=idcuenta_paga limit 1 ) as cuenta_paga  FROM `transaccion` WHERE NOT `aprobada` or `aprobada` is null;';
        $con = Connection::getInstancia();
        return $con->obtenerQuery($SQL_UPDATE);
    }

    public function consiltarTransaccionesUsuario($idusuario) {
        //const SQL_UPDATE='SELECT * FROM `transaccion` WHERE `ESTADO`='. $estado . ';';        
        $SQL_UPDATE = 'SELECT `id`, 
             (select numero from cuenta where id=idcuenta_recibe limit 1 )
            as nombrerecibe, 
            (select concat(nombres," ",apellidos) from usuario where id=(select idpropietario from cuenta where id=idcuenta_paga limit 1 )limit 1) 
            as nombrepaga,             
            aprobada,monto,(select numero from cuenta where id=idcuenta_paga limit 1 ) as cuenta_paga  FROM `transaccion` WHERE  idcuenta_paga IN (select id from cuenta where idpropietario=' . $idusuario . ') ';
        $con = Connection::getInstancia();
        return $con->obtenerQuery($SQL_UPDATE);
    }

}

?>
